package vistas;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.DefaultCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;

import modelo.vista.LoteCompuestoView;
import modelo.vista.LoteSimpleView;

import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;
import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.swingbinding.JListBinding;
import org.jdesktop.swingbinding.SwingBindings;

import controladores.AdministrateLotesCompuestosControlador;


@SuppressWarnings("rawtypes")
public class AdministrateLotesCompuestosVista extends JPanel implements AbstractVista<AdministrateLotesCompuestosControlador> {
	
	private static final long serialVersionUID = 1L;

	private JList listLotesSimple;
	private JList listLotesCompuestos;
	private JButton btnBuscarLoteSimple;
	private JLabel lblBuscarLoteSimple;
	private JTextField txtBuscarLoteSimple;
	private JTextField txtBuscarCompuesto;

	private AdministrateLotesCompuestosControlador controlador;
	private JTextField txtNroNuevoLote;

	public AdministrateLotesCompuestosVista() {
		super();
		initComponents();
	}

	public AdministrateLotesCompuestosVista(AdministrateLotesCompuestosControlador controladorLotesCompuestos) {
		super();
		this.controlador = controladorLotesCompuestos;
		initComponents();
	}

	public AdministrateLotesCompuestosControlador getControlador() {
		return controlador;
	}

	public void setControlador(AdministrateLotesCompuestosControlador controlador) {
		this.controlador = controlador;
	}

	
	private void initComponents() {
		this.setLayout(null);
		this.setPreferredSize(new Dimension(790, 440));
		listLotesSimple = new JList();
		listLotesCompuestos = new JList();
		

		listLotesSimple.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listLotesSimple.setBounds(453, 52, 312, 188);
		add(listLotesSimple);
		listLotesCompuestos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listLotesCompuestos.setBounds(26, 52, 322, 188);
		add(listLotesCompuestos);

		JButton btnAgregarLoteSimple = new JButton(new ImageIcon(AdministrateLotesCompuestosVista.class.getResource("/uiImages/add.png")));
		btnAgregarLoteSimple.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnAgregarLoteSimple.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				controlador.agregarLoteSimple(listLotesSimple.getSelectedIndex());
				listLotesSimple.setSelectedIndex(0);
			}
		});
		
		btnAgregarLoteSimple.setHorizontalAlignment(SwingConstants.LEFT);
	
		btnAgregarLoteSimple.setText("Agregar lote simple");
		btnAgregarLoteSimple.setBounds(373, 299, 191, 40);
		add(btnAgregarLoteSimple);

		JButton btnSacarLoteSimple = new JButton(new ImageIcon(AdministrateLotesCompuestosVista.class.getResource("/uiImages/remove.png")));
		btnSacarLoteSimple.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnSacarLoteSimple.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				controlador.sacarLoteSimple(listLotesSimple.getSelectedIndex());
				listLotesSimple.setSelectedIndex(0);
			}
		});
		
		btnSacarLoteSimple.setHorizontalAlignment(SwingConstants.LEFT);
		btnSacarLoteSimple.setText("Eliminar lote simple");
		btnSacarLoteSimple.setBounds(574, 299, 191, 40);
		add(btnSacarLoteSimple);

		txtBuscarLoteSimple = new JTextField();
		this.add(txtBuscarLoteSimple);
		txtBuscarLoteSimple.setBounds(587, 252, 84, 23);

		lblBuscarLoteSimple = new JLabel();
		lblBuscarLoteSimple.setFont(new Font("Tahoma", Font.PLAIN, 12));
		this.add(lblBuscarLoteSimple);
		lblBuscarLoteSimple.setText("Buscar lote simple:");
		lblBuscarLoteSimple.setBounds(453, 254, 124, 16);

		btnBuscarLoteSimple = new JButton();
		this.add(btnBuscarLoteSimple);
		btnBuscarLoteSimple.setText("Buscar");
		btnBuscarLoteSimple.setBounds(681, 251, 84, 23);
		btnBuscarLoteSimple.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String nombre = txtBuscarLoteSimple.getText();
				LoteSimpleView loteBuscado = controlador.buscarConNumero(Integer.parseInt(nombre));
				if(loteBuscado != null){
					controlador.getLotesSimplesView().add(loteBuscado);
					listLotesSimple.setSelectedIndex(getComponentCount());
				}else{
					txtBuscarLoteSimple.setText("No se encontro Lote");
				}
			}
		});

		listLotesSimple.setSelectedIndex(0);
		
		JLabel lblLotesSimples = new JLabel("Lotes Simples");
		lblLotesSimples.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblLotesSimples.setBounds(574, 11, 110, 23);
		add(lblLotesSimples);
		
		
		
		JLabel lblBuscarLoteCompuesto = new JLabel("Buscar lote compuesto:");
		lblBuscarLoteCompuesto.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblBuscarLoteCompuesto.setBounds(26, 255, 157, 14);
		add(lblBuscarLoteCompuesto);
		
		txtBuscarCompuesto = new JTextField();
		txtBuscarCompuesto.setBounds(193, 252, 69, 20);
		add(txtBuscarCompuesto);
		txtBuscarCompuesto.setColumns(10);
		
		JButton btnBuscarLoteCompuesto = new JButton("Buscar");
		btnBuscarLoteCompuesto.setBounds(272, 251, 76, 23);
		btnBuscarLoteCompuesto.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				String nombre = txtBuscarCompuesto.getText();
				LoteCompuestoView loteBuscado = controlador.buscarConNumeroLoteCompuesto(Integer.parseInt(nombre));
				if(loteBuscado != null){
					controlador.getLotesCompuestosView().add(loteBuscado);
					listLotesCompuestos.setSelectedIndex(0);
				}else{
					txtBuscarLoteSimple.setText("No se encontro Lote");
				}
			}
		});
		add(btnBuscarLoteCompuesto);
		
		JLabel lblLoteCompuesto = new JLabel("Lote Compuesto");
		lblLoteCompuesto.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblLoteCompuesto.setBounds(130, 13, 132, 19);
		add(lblLoteCompuesto);
		
		JButton btnAltaLoteCompuesto = new JButton("Alta lote compuesto");
		btnAltaLoteCompuesto.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				LoteCompuestoView cl = new LoteCompuestoView();
				controlador.altaLoteCompuesto(cl);
				listLotesSimple.removeAll();
			}
		});
		btnAltaLoteCompuesto.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnAltaLoteCompuesto.setBounds(321, 375, 217, 40);
		add(btnAltaLoteCompuesto);
		
		JButton btnEliminarLoteCompuesto = new JButton("Eliminar lote compuesto");
		btnEliminarLoteCompuesto.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnEliminarLoteCompuesto.setBounds(548, 375, 217, 40);
		add(btnEliminarLoteCompuesto);
		
		JButton btnNuevoLoteCompuesto = new JButton("Nuevo lote compuesto");
		btnNuevoLoteCompuesto.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnNuevoLoteCompuesto.setBounds(36, 363, 191, 40);
		btnNuevoLoteCompuesto.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				controlador.agregarNuevoLoteCompuesto(Integer.parseInt(txtNroNuevoLote.getText()));
				listLotesCompuestos.setSelectedIndex(0);
			}
		});
		add(btnNuevoLoteCompuesto);
		
		txtNroNuevoLote = new JTextField();
		txtNroNuevoLote.setBounds(141, 332, 86, 20);
		add(txtNroNuevoLote);
		txtNroNuevoLote.setColumns(10);
		
		JLabel lblNmeroLote = new JLabel("N\u00FAmero lote");
		lblNmeroLote.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblNmeroLote.setBounds(39, 334, 92, 14);
		add(lblNmeroLote);
		btnEliminarLoteCompuesto.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				controlador.eliminarLoteCompuesto();
				listLotesSimple.removeAll();
			}
		});
		
		initDataBindings();
		
	}



	class MineralEditor extends DefaultCellEditor {
		private static final long serialVersionUID = 1L;
		@SuppressWarnings("unchecked")
		public MineralEditor(Object[] items) {
	        super(new JComboBox(items));
	    }
	}
	
	protected void initDataBindings() {
		BeanProperty<AdministrateLotesCompuestosControlador, List<LoteSimpleView>> administrateLotesControladorBeanProperty = BeanProperty.create("lotesSimplesView");
		JListBinding<LoteSimpleView, AdministrateLotesCompuestosControlador, JList> jListBinding = SwingBindings.createJListBinding(UpdateStrategy.READ, controlador, administrateLotesControladorBeanProperty, listLotesSimple);
		//
		BeanProperty<LoteSimpleView, Integer> loteBeanProperty = BeanProperty.create("nroLote");
		jListBinding.setDetailBinding(loteBeanProperty);
		//
		jListBinding.bind();
		
		BeanProperty<AdministrateLotesCompuestosControlador, List<LoteCompuestoView>> administrateLotesControladorBeanProperty_1 = BeanProperty.create("lotesCompuestosView");
		JListBinding<LoteCompuestoView, AdministrateLotesCompuestosControlador, JList> jListBinding_1 = SwingBindings.createJListBinding(UpdateStrategy.READ, controlador, administrateLotesControladorBeanProperty_1, listLotesCompuestos);
		//
		BeanProperty<LoteCompuestoView, Integer> loteBeanProperty_1 = BeanProperty.create("nroLote");
		jListBinding_1.setDetailBinding(loteBeanProperty_1);
		//
		jListBinding_1.bind();
	}
}



